#include <stdio.h>
void quick_sort(int *p_val,int size) {
	int base = *p_val;	//把最前面的数字作为选定数字记录到base变量中。
	int *p_head = p_val;	//记录要处理的两个存储区中前面的那个，最开始的时候要指向数组最前面的存储区。
	int *p_tail = p_val + size - 1;	//记录要处理的两个存储区中后面的那个，最开始的时候指向数组最后面的存储区。
	int tmp = 0;
	if(size <= 1) {
		//数组里的存储区个数小于等于一个，这个时候不需要进行任何排序处理。
		return;
	}
	while(p_head < p_tail) {	//如果两个指针还没有相遇就说明还有存储区没有处理完，这个时候循环就应该继续。
		if(*p_head > *p_tail) {
			//要处理的两个存储区中前面存储区的内容大，就需要交换它们的内容。
			tmp = *p_head;
			*p_head = *p_tail;
			*p_tail = tmp;
		}
		//把上面处理过的两个存储区里，内容不是选定数字的存储区排除在外。
		if(*p_head == base) {
			//如果前面存储区的内容是选定数字，就应该排除后面的存储区。
			p_tail--;
		}
		else {
			p_head++;
			//如果后面存储区的内容是选定数字，就应该排除后面的存储区。
		}
	}
	//当while循环结束后，p_head和p_tail指针都指向选定数字所在的存储区。
	quick_sort(p_val, p_head - p_val);	//对左半边数字单独进行排序。
	quick_sort(p_tail + 1, size - (p_head - p_val) - 1);	//对右半边数字单独进行排序。
}
int main() {
	int arr[] = {20, 10, 30, 90, 80, 70};
	int num = 0;
	quick_sort(arr, 6);
	for(num = 0; num < 6; num++) {
		printf("%d ", arr[num]);
	}
	printf("\n");
}
